package com.rickpan.service;

import com.rickpan.entity.TeamMember;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Optional;

/**
 * 团队成员服务接口
 */
public interface TeamMemberService {

    /**
     * 添加团队成员
     */
    TeamMember addMember(TeamMember teamMember);

    /**
     * 根据ID查找团队成员
     */
    Optional<TeamMember> findById(Long id);

    /**
     * 根据团队ID和用户ID查找成员
     */
    Optional<TeamMember> findByTeamIdAndUserId(Long teamId, Long userId);

    /**
     * 获取团队所有成员
     */
    List<TeamMember> findByTeamId(Long teamId);

    /**
     * 获取用户参与的所有团队
     */
    List<TeamMember> findByUserId(Long userId);

    /**
     * 获取用户的活跃团队
     */
    List<TeamMember> findActiveTeamsByUserId(Long userId);

    /**
     * 分页查询团队成员
     */
    Page<TeamMember> findByTeamId(Long teamId, Pageable pageable);

    /**
     * 更新成员信息
     */
    TeamMember updateMember(TeamMember teamMember);

    /**
     * 移除团队成员
     */
    void removeMember(Long teamId, Long userId);

    /**
     * 检查用户是否为团队成员
     */
    boolean isTeamMember(Long teamId, Long userId);

    /**
     * 检查用户是否为团队管理员
     */
    boolean isTeamAdmin(Long teamId, Long userId);

    /**
     * 检查用户是否为团队所有者
     */
    boolean isTeamOwner(Long teamId, Long userId);

    /**
     * 获取团队成员数量
     */
    long countByTeamId(Long teamId);

    /**
     * 获取团队活跃成员数量
     */
    long countActiveByTeamId(Long teamId);

    /**
     * 更新成员角色
     */
    TeamMember updateMemberRole(Long teamId, Long userId, TeamMember.Role newRole);

    /**
     * 转移团队所有权
     */
    TeamMember transferOwnership(Long teamId, Long currentOwnerId, Long newOwnerId);

    /**
     * 获取团队成员列表
     */
    List<TeamMember> getTeamMembers(Long teamId);

    /**
     * 检查用户是否可以管理团队设置
     * (包括OWNER和ADMIN角色)
     */
    boolean canManageTeamSettings(Long teamId, Long userId);
}
